import tool from "@/utils/tool";
import {ElMessage, ElMessageBox, ElNotification, ElLoading} from 'element-plus';

let loadingInstance;

let modal = {

    /**
     * 处理 webSocket 消息内容
     * @param page 页面类型
     * @param socketResult 消息内容
     */
    handleSocketResult(page, socketResult) {
        if (page && page === socketResult.page && socketResult.type === "MODAL") {
            modal[socketResult.record.modal](socketResult.record.content);
        }
    },

    /**
     * 消息提示
     * @param message 提示信息
     * @param params 配置参数
     */
    message(message, params) {
        if (!params) {
            return ElMessage({message, customClass: "jcx-message"});
        } else {
            const {
                icon,
                type = "info",
                dangerouslyUseHTMLString = false,
                customClass = "antd",
                duration = 2000,
                showClose = false,
                center = false,
                offset = 20,
                appendTo = document.body,
                grouping = false,
                onClose
            } = params;
            return ElMessage({
                message,
                type,
                icon,
                dangerouslyUseHTMLString,
                duration,
                showClose,
                center,
                offset,
                appendTo,
                grouping,
                customClass: customClass === "antd" ? "jcx-message" : "",
                onClose: () => (tool.isFunction(onClose) ? onClose() : null)
            });
        }
    },

    /**
     * 信息消息
     * @param content 提示信息
     */
    infoMessage(content) {
        this.message(content);
    },

    /**
     * 错误消息
     * @param content 提示信息
     */
    errorMessage(content) {
        this.message(content, {type: 'error'})
    },

    /**
     * 成功消息
     * @param content 提示信息
     */
    successMessage(content) {
        this.message(content, {type: 'success'})
    },

    /**
     * 警告消息
     * @param content 提示信息
     */
    warningMessage(content) {
        this.message(content, {type: 'warning'})
    },

    /**
     * 关闭所有消息提示
     */
    closeAllMessage() {
        ElMessage.closeAll()
    },

    /**
     * 信息弹窗
     * @param content 提示信息
     */
    infoAlert(content) {
        ElMessageBox.alert(content, "系统提示", {center: true})
    },

    /**
     * 错误弹窗
     * @param content 提示信息
     */
    errorAlert(content) {
        ElMessageBox.alert(content, "系统提示", {type: 'error', center: true})
    },

    /**
     * 成功弹窗
     * @param content 提示信息
     */
    successAlert(content) {
        ElMessageBox.alert(content, "系统提示", {type: 'success', center: true})
    },

    /**
     * 警告弹窗
     * @param content 提示信息
     */
    warningAlert(content) {
        ElMessageBox.alert(content, "系统提示", {type: 'warning', center: true})
    },

    /**
     * 信息通知
     * @param content 提示信息
     */
    infoNotify(content) {
        ElNotification.info(content)
    },

    /**
     * 错误通知
     * @param content 提示信息
     */
    errorNotify(content) {
        ElNotification.error(content);
    },

    /**
     * 成功通知
     * @param content 提示信息
     */
    successNotify(content) {
        ElNotification.success(content)
    },

    /**
     * 警告通知
     * @param content 提示信息
     */
    warningNotify(content) {
        ElNotification.warning(content)
    },

    /**
     * 确认弹窗
     * @param content 提示信息
     * @returns {Promise<MessageBoxData>} 返回值
     */
    confirm(content) {
        return ElMessageBox.confirm(content, "系统提示", {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: "warning",
        })
    },

    /**
     * 输入弹窗
     * @param content 提示信息
     * @returns {Promise<MessageBoxData>} 返回值
     */
    prompt(content) {
        return ElMessageBox.prompt(content, "系统提示", {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: "warning",
        })
    },

    /**
     * 打开遮罩层
     * @param content 提示信息
     */
    openLoading(content) {
        loadingInstance = ElLoading.service({
            lock: true,
            text: content,
            background: "rgba(0, 0, 0, 0.7)",
        })
    },

    /**
     * 关闭遮罩层
     */
    closeLoading() {
        loadingInstance.close();
    }
}

export default modal;